package com.cmq.web_1.listener;

import jakarta.servlet.ServletContext;
import jakarta.servlet.http.HttpSessionEvent;
import jakarta.servlet.http.HttpSessionListener;

public class OnlineUserListener implements HttpSessionListener {

    // 会话创建时（用户上线）
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        ServletContext application = se.getSession().getServletContext();
        // 从应用域获取当前在线人数（默认0）
        Integer onlineCount = (Integer) application.getAttribute("onlineCount");
        if (onlineCount == null) {
            onlineCount = 0;
        }
        // 在线人数+1，同步处理避免并发问题
        synchronized (this) {
            application.setAttribute("onlineCount", onlineCount + 1);
        }
        System.out.println("【在线统计】用户上线，当前在线：" + (onlineCount + 1) + " 人");
    }

    // 会话销毁时（用户下线）
    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        ServletContext application = se.getSession().getServletContext();
        Integer onlineCount = (Integer) application.getAttribute("onlineCount");
        if (onlineCount == null || onlineCount <= 0) {
            onlineCount = 0;
        } else {
            onlineCount--; // 在线人数-1
        }
        application.setAttribute("onlineCount", onlineCount);
        System.out.println("【在线统计】用户下线，当前在线：" + onlineCount + " 人");
    }
}